我们使用compose建设一个python的web应用, 我们会使用到flash框架和redis.

预备知识

请确保你已经安装了docker enginedocker compose, 你不需要安装python和redis, 因为我们要使用docker镜像.

步骤一

定义程序的依赖

  1. 创建一个文件夹来存放程序

    mkdir compose-test cd compose-test

  2. 创建一个app.py文件, 并且把下面内容粘贴进文件中

    import time

    import redis from flask import Flask

    app = Flask(name) cache = redis.Redis(host='redis', port=6379)

    def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times.\n'.format(count)

  3. 创建一个requirements.txt文件, 并粘贴下面内容到文件, 该文件是让python知道安装哪些依赖包.

    flask redis

步骤二 创建一个Dockerfile

这个Dockerfile是以python镜像为基础来构建我们的python应用.

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

我们来解释下上面的内容:

  • python:3.7-alpine为基础镜像
  • 设置我们的工作目录为/code
  • 设置flask需要用到的两个环境变量
  • 安装gcc和其他依赖
  • 复制requirement.txt到镜像并且安装python依赖
  • 让启动后的容器打开5000端口
  • 复制当前目录的所有文件到镜像的工作目录/code里面(主要是复制app.py文件)
  • 设置容器启动后执行的命令flask run

步骤三 开始写我们的compose文件

创建一个docker-compose.yml文件, 并粘贴下面内容到里面

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

解释 ①这个compose创建了两个容器, 一个名叫web, 另一个叫redis ②这个web容器是使用Dockerfile构建的镜像生成的, 并且把容器5000端口和本机的5000端口绑定

步骤四 使用compose来构建和运行我们的程序

  1. compose-test目录里面, 运行docker-compose up命令

compose会根据docker-compose.yml的代码来配置镜像, 然后启动这些配置好的镜像, 生成容器.

  1. 在浏览器中输入http://localhost:5000/来观察程序的运行情况.

你会观察到下图的内容 20210213150152-2021-12-30-09-53-01

  1. 刷新页面

数字应该会增加

Hello World! I have been seen 2 times.
  1. 在命令行窗口输入docker image ls列出本地的所有镜像

在本地镜像中一定有webredis两个镜像. 你可以通过docker inspect <tag or id>来检查具体的镜像信息.

  1. 命令行输入docker-compose down命令停止程序的运行

步骤五 编辑docker-compose.yml使用挂载卷

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:alpine"

我们使用了新的volumes关键字, 它会让主机上的当前文件夹和容器内的/code文件夹进行绑定. 这样我们就可以自由修改主机当前文件夹内容而不需重新构建镜像.

而且我们增加了FLASK_ENV: development, 该命令的意思是告诉flask框架进入开发者模式, 该模式的主要作用就是当检测到文件改变就热启动应用程序.(容器内热启动, 不会重新构建镜像启动容器)

步骤六 重新构建并运行容器

在你的项目目录下, 运行docker-compose up命令, 然后在浏览器中重新检查

步骤七 修改主机上挂载的卷内容,然后观察变化

修改app.py, 把Hello world!修改为Hello from docker!

return 'Hello from Docker! I have been seen {} times.\n'.format(count)

重新刷新浏览器就可以看见我们的应用被更新了

20210213152528-2021-12-30-09-53-16

步骤八 可以测试其他的docker-compose命令

#使用守护进程启动应用
docker-compose up -d
#查看应用的状态
docker-compose ps
#如果使用守护进程模式启动后,必须使用该命令来停止应用
docker-compose stop
#停止应用并且删除容器
docker-compose down
THE END
推荐文章
  • taro编译小程序后报 touristappid Error:tourist appid

  • linux安装nginx

  • 查看个人小程序的累计独立访客(UV)

  • exports和module.exports详解

  • antd样式和tailwindcss冲突

  • 做好闲鱼平台必须知道的6个核心算法

  • win10如何安装ffmpeg

  • 黄帝内经-第十九篇-玉机真脏论篇(1)

评论 共0条
开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

0字

0字

2024年10月

0字

新增

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

0字

新增

0字

0字

0字

0字

新增

0字

0字